package com.tabnet.servlet;

import java.io.IOException;
import java.util.HashMap;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.tabnet.beans.gammeproduit.AppelOffre;
import com.tabnet.dao.DAOAppelOffre;
import com.tabnet.dao.DAOException;
import com.tabnet.dao.DAOFactory;
import com.tabnet.form.CreationAppelOffreForm;

/**
 * Servlet qui s'occupe de créer un nouvel appel d'offre
 *
 */
public class CreationAppelOffre extends HttpServlet {

	private static final long serialVersionUID = 1L;
	
    public static final String ATT_APPEL		  	= "appelOffre";
    public static final String ATT_FORM        		= "form";
    public static final String SESSION_APPEL		= "appelsOffre";

    public static final String VUE_SUCCES      		= "/admin/listeAppelOffre.jsp";
    public static final String VUE_FORM        		= "/admin/creerAppelOffre.jsp";
    
    private DAOAppelOffre appelDao;

    public void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {
        /* À la réception d'une requête GET, simple affichage du formulaire */
        this.getServletContext().getRequestDispatcher( VUE_FORM ).forward( request, response );
    }

    @SuppressWarnings("unchecked")
    public void doPost( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {
    	try {
			this.appelDao = DAOFactory.getInstance().getAppelOffreDAO();
		} catch (DAOException e1) {
			e1.printStackTrace();
		}
    	
    	/* Préparation de l'objet formulaire */
    	CreationAppelOffreForm form = new CreationAppelOffreForm(appelDao);

        /* Traitement de la requête et récupération du bean en résultant */
        AppelOffre appelOffre = form.creerAppelOffre( request );
        /* Ajout du bean et de l'objet métier à l'objet requête */
        request.setAttribute( ATT_FORM, form );
        request.setAttribute( ATT_APPEL, appelOffre );

        /* Si aucune erreur */
        if ( form.getErreurs().isEmpty() ) {
            /* Alors récupération de la map des appels d'offre dans la session */
            HttpSession session = request.getSession();
            
            HashMap<String, AppelOffre> lesAppels = (HashMap<String, AppelOffre>) session.getAttribute( SESSION_APPEL );
            /* Si aucune map n'existe, alors initialisation d'une nouvelle map */
            if ( lesAppels == null ) {
            	lesAppels = new HashMap<String, AppelOffre>();
            }
            /* Puis ajout de l'appel courant dans la map */
            lesAppels.put( appelOffre.getRef(), appelOffre );
            
            /* Et enfin (ré)enregistrement de la map en session */
            session.setAttribute( SESSION_APPEL, lesAppels );

            /* Affichage de la fiche récapitulative */
            response.sendRedirect( request.getContextPath() + VUE_SUCCES );
        } else {
            /* Sinon, ré-affichage du formulaire de création avec les erreurs */
            this.getServletContext().getRequestDispatcher( VUE_FORM ).forward( request, response );
        }
    }
}
